/*
 * bsp_nvm3.h
 *
 *  Created on: 2023年6月28日
 *      Author: mcealt_DS
 */

#ifndef BSP_NVM_H_
#define BSP_NVM_H_

#include <stdint.h>
#include <stddef.h>

typedef enum 
{
  NVM_OK = 0,
  NVM_ERR_INIT,
  NVM_ERR_DEINIT,
  NVM_ERR_DELETE,
  NVM_ERR_WRITE, 
  NVM_ERR_READ,
  NVM_ERR_REST,  
  NVM_ERR_KEY,   //Invalid key OR key does not contain data object
}NVM_ERR_E;

/*
 * 函数名:DS_nvmInit
 * 功能： nvm 初始化
 * 输出： 返回执行结果
 */
NVM_ERR_E DS_nvmInit(void);

/*
 * 函数名:DS_nvmDeinit
 * 功能： nvm 功能取消初始化
 * 输出： 返回执行结果
 */
NVM_ERR_E DS_nvmDeinit(void);

/*
 * 函数名:DS_nvmDelete
 * 功能： nvm 删除一个key序列内的数据
 * 输入： key 需要删除的key序列
 * 输出： 返回执行结果
 */
NVM_ERR_E DS_nvmDelete(uint32_t key);

/*
 * 函数名:DS_nvmWrite
 * 功能： nvm 在key序列内写入数据
 * 输入： key    需要写入的key序列
 *       value   需要写入的数据
 *        len    需要写入数据的字节长度
 * 输出： 返回执行结果
 */
NVM_ERR_E DS_nvmWrite(uint32_t key, void *value, uint32_t len);

NVM_ERR_E DS_nvmWriteWithLen(uint32_t key, void *value);
/*
 * 函数名:DS_nvmRead
 * 功能： nvm 读取key序列内的数据
 * 输入： key    需要读取的key序列
 *       value   读取的数据缓存
 *        len    需要读取数据的字节长度
 * 输出： 返回执行结果
 */
NVM_ERR_E DS_nvmRead(uint32_t key, void *value, size_t len);

NVM_ERR_E DS_nvmReadOfs(uint32_t key, void *value, size_t len,size_t ofs);
/*
 * 函数名:DS_nvmReset
 * 功能： nvm 擦除所有数据
 * 输出： 返回执行结果
 */
NVM_ERR_E DS_nvmReset(void);

NVM_ERR_E DS_nvmWriteOfsWithPackLen(uint32_t key, void *value, uint32_t len,size_t ofs,size_t pack_len);

#endif /* BSP_NVM3_H_ */
